"use strict";
$(document).ready(function() {

  var $table = $('#vouchers').DataTable({
    bProcessing : true,
    bServerSide : true,
    sPaginationType : 'full_numbers',
    scrollX: true,
    oLanguage : {
      sLengthMenu : '每页显示 _MENU_ 条',
      sInfo : '第 _START_ -  _END_ 条，共 _TOTAL_ 条',
      sInfoFiltered : '',
      sInfoEmpty : '没有数据',
      sZeroRecords : '没有数据',
      sProcessing : '正在加载数据...',
      oPaginate : {
        sFirst : '首页',
        sPrevious : '前一页',
        sNext : '后一页',
        sLast : '末页'
      },
      sSearch : '检索',
      sSearchPlaceholder : '输入产品、货架的编号或名称'
    },
    columns : [ {
      data : 'id',
      width : '50px'
    }, {
      data : 'deliveryTime',
      className : 'text-center',
      render : function(data, type, row, meta) {
        return $.format.date(data, 'yyyy-M-d H:mm')
      },
      width : '100px'
    }, {
      data : 'productId',
      width : '100px'
    }, {
      data : 'productName',
      width : '150px'
    }, {
      data : 'quantity',
      width : '50px'
    }, {
      data : 'rackId',
      width : '100px'
    }, {
      data : 'layer',
      width : '100px',
      render : function(data, type, row, meta) {
        return data + '层' + row.col + '号';
      }
    }, {
      data : 'vendor',
      width : '150px'
    }, {
      data : 'phone',
      width : '100px'
    }, {
      data : 'userName',
      width : '100px'
    } ],
    order: [ [0, 'desc'] ],
    ajax : function(data, callback, settings) {
      var d = $.customParam(data);
      $.ajax({
        dataType : 'json',
        method : 'POST',
        url : 'dv_processing.json',
        data : d,
        success : function(json) {
          var error = json.error || json.sError;
          if (error) {
            alert(error);
            return;
            // _fnLog( oSettings, 0, error );
          }
          settings.json = json;
          callback(json);
        }
      });
    }
  });
  $('#vouchers tbody').on('click', 'tr', function() {
    if ($(this).hasClass('selected')) {
      $(this).removeClass('selected');
    } else {
      $table.$('tr.selected').removeClass('selected');
      $(this).addClass('selected');
    }
  });

  var uploader = WebUploader.create({
    // 选完文件后，是否自动上传。
    auto : true,
    // swf文件路径
    swf : 'vendors/webuploader/Uploader.swf',
    // 文件接收服务端。
    server : 'dv/upload',
    // 选择文件的按钮。可选。
    // 内部根据当前运行是创建，可能是input元素，也可能是flash.
    pick : '#filePicker',

    // 只允许选择文件。
    accept : {
      title : '数据文件',
      extensions : 'xls,xlsx',
      mimeTypes : 'application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    }
  });
  uploader.on('uploadBeforeSend', function(object, data, headers) {
  });
  uploader.on('uploadSuccess', function(file, resp) {
    showImportDialog(resp);
  });
  
  var refreshImages = function(productId, currentName, imageDiv, listDiv) {
    var name = currentName;
    $.ajax({
      url : 'product/' + productId + '/images.json',
      method : 'GET',
      success : function(ret) {
        var html = '';
        for (var i = 0; i < ret.length; i++) {
          var file = ret[i];
          if (!name) {
            name = file.name;
          }
          if (i > 0) {
            html += '&nbsp;';
          }
          html += '<a href="javascript:void(0);"';
          if (name == file.name) {
            html += ' class="selected"';
          }
          html += '>' + file.name + '</a>';
        }
        $(listDiv).html(html);
        if (name && name.length > 0) {
          $(imageDiv).html('<img src="product/' + productId + '/' + name + '" />');
        } else {
          $(imageDiv).html('');
        }
      }
    });
  };  
  
  // 新增处理
  $('#creatediv form').validate({
    rules : {
      productid : {
        required : true
      },
      barcode : {
        required : true
      },
      rackid : {
        required : true
      },
      layer: {
        required : true,
        digits: true,
        min: 1
      },
      col: {
        required : true,
        digits: true,
        min: 1
      },
      quantity : {
        required : true,
        digits : true,
        min : 1,
        remote: {
          url: 'dv/check',
          method: 'post',
          data: {
            productId: function() {
              return $('#add_productid').val();
            },
            rackId: function() {
              return $('#add_rackid').val();
            },
            quantity: function() {
              return $('#add_quantity').val();
            }
          }
        }
      }
    },
    messages : {
      productid : {
        required : '产品编号不能为空'
      },
      barcode : {
        required : '产品条码不能为空'
      },
      rackid : {
        required : '货架编号不能为空'
      },
      layer: {
        required : '所在层必须填写',
        digits: '所在层必须是整数',
        min: '所在层必须大于0'
      },
      col: {
        required : '所在号必须填写',
        digits: '所在号必须是整数',
        min: '所在号必须大于0'
      },
      quantity : {
        required : '产品数量必须填写',
        digits : '产品数量必须是整数',
        min : '产品数量必须大于0',
        remote: '没有足够的库存'
      }
    },
    errorClass : 'has-error',
    validClass : 'has-success',
    highlight : function(element, errorClass, validClass) {
      var $c = $(element).closest('div.form-group');
      $c.addClass(errorClass).removeClass(validClass);
    },
    unhighlight : function(element, errorClass, validClass) {
      var $c = $(element).closest('div.form-group');
      $c.removeClass(errorClass).addClass(validClass);
    }
  });
  var addDlg;
  $('#btnAdd').click(function() {
    addDlg = layer.open({
      type : 1,
      title : false,
      area : '800px',
      closeBtn : true,
      shadeClose : false,
      content : $('#creatediv')
    });
    $('#creatediv form').get(0).reset();
    $('#creatediv form').validate().resetForm();
    $('#add_productid')[0].focus();
  });
  $('#add_productid').blur(function() {    
    var $this = $(this);
    var productId = $.trim($this.val());
    if($this.data('oldv') == productId) {
      return;
    }
    if (productId == '') {
      $this.data('oldv', productId);
      $('#add_barcode').val('').data('oldv', '');
      $('#add_productname').text('');
      $('#add_vendor').text('');
      refreshImages(null, null, $('#creatediv .images'), $('#add_images'));
      return;
    }
    $.ajax({
      url : 'product/' + productId,
      method : 'GET',
      data : {
        _method : 'GET'
      }
    }).done(function( data, textStatus, jqXHR ) {
      $this.data('oldv', productId);
      $('#add_barcode').val(data.barcode).data('oldv', data.barcode);
      $('#add_productname').text(data.name);
      $('#add_vendor').text(data.vendor);
      refreshImages(productId, null, $('#creatediv .images'), $('#add_images'));
    });
  });
  $('#add_barcode').blur(function() {    
    var $this = $(this);
    var barcode = $.trim($this.val());
    if($this.data('oldv') == barcode) {
      return;
    }
    if (barcode == '') {
      $this.data('oldv', barcode);
      $('#add_productid').val('').data('oldv', '');
      $('#add_productname').text('');
      refreshImages(null, null, $('#creatediv .images'), $('#add_images'));
      return;
    }
    $.ajax({
      url : 'product/barcode/' + barcode,
      method : 'GET',
      data : {
        _method : 'GET'
      }
    }).done(function( data, textStatus, jqXHR ) {
      $this.data('oldv', barcode);
      $('#add_productid').val(data.id).data('oldv', data.id);
      $('#add_productname').text(data.name);
      $('#add_vendor').text(data.vendor);
      refreshImages(data.id, null, $('#creatediv .images'), $('#add_images'));
    });
  });
  $('#add_images').on('click', 'a', function() {
    var $this = $(this);
    var productId = $('#add_productid').val();
    $('#add_images a').removeClass('selected');
    $this.addClass('selected');
    $('#creatediv .images').html('<img src="product/' + productId + '/' + $this.text() + '" />');
  });
  $('#add_rackid').blur(function() {
    var $this = $(this);
    var rackId = $.trim($this.val());
    if($this.data('oldv') == rackId) {
      return;
    }
    if (rackId == '') {
      $this.data('oldv', '');
      return;
    }
    $.ajax({
      url : 'rack/' + rackId,
      method : 'GET',
      data : {
        _method : 'GET'
      }
    }).done(function(data, textStatus, jqXHR){
      if(!data) {
        alert('货架编号不存在！');
        $this.focus();
      } else {
        $this.data('oldv', rackId);
      }
    });
  });

  $('#add_productid').keydown(function(e) {
    if (e.keyCode == 13) {
      $('#add_rackid').focus();
    }
  });
  $('#add_barcode').keydown(function(e) {
    if (e.keyCode == 13) {
      $('#add_rackid').focus();
    }
  });
  $('#add_rackid').keydown(function(e) {
    if (e.keyCode == 13) {
      $('#add_layer').focus();
    }
  });
  $('#add_layer').keydown(function(e) {
    if (e.keyCode == 13) {
      $('#add_col').focus();
    }
  });
  $('#add_col').keydown(function(e) {
    if (e.keyCode == 13) {
      $('#add_quantity').focus();
    }
  });
  $('#add_quantity').keydown(function(e) {
    if (e.keyCode == 13) {
      $('#creatediv .userdlg-bbar .btn-primary').click();
    }
  });
  $('#creatediv .userdlg-bbar .btn-default').click(function() {
    layer.close(addDlg);
  });
  $('#creatediv .userdlg-bbar .btn-primary').click(function() {
    if (!$('#creatediv form').valid()) {
      layer.alert('请修正输入错误！');
    } else {
      var data = {
        id : 0,
        productId : $('#add_productid').val(),
        barcode: $('#add_barcode').val(),
        productName : $('#add_productname').text(),
        vendor : $('#add_vendor').text(),
        rackId : $('#add_rackid').val(),
        layer: $('#add_layer').val(),
        col: $('#add_col').val(),
        quantity : $('#add_quantity').val()
      };
      data['_method'] = 'POST';
      $.ajax({
        url : 'dv',
        method : 'POST',
        data : data,
        success : function(ret) {
          layer.close(addDlg);
          $table.ajax.reload();
        }
      });
    }
  });


  var importDlg;
  var importData;
  var importTable;
  var showImportDialog = function(data) {
    importDlg = layer.open({
      type : 1,
      title : false,
      area : ['800px', '400px'],
      closeBtn : true,
      shadeClose : false,
      content : $('#importdiv')
    });
    if(!importTable) {
      importTable = $('#importdiv table').DataTable({
        autoWidth: false,
        ordering: false,
        scrollX: true,
        scrollY: 290,
        dom: 'tr',
        oLanguage : {
        },
        columns : [ {
          data : 'productId',
          width : '80px'
        }, {
          data : 'barcode',
          width : '80px'
        }, {
          data : 'productName',
          width : '150px'
        }, {
          data : 'quantity',
          width : '70px',
          render : function(data, type, row, meta) {
            return '<input class="quantity" type="text" value="' + data + '">';
          }
        }, {
          data : 'rackId',
          width : '150px',
          render : function(data, type, row, meta) {
            return '<input class="rackid"  type="text" value="' + (data || '') + '">';
          }
        }, {
          data : 'layer',
          width : '70px',
          render : function(data, type, row, meta) {
            return '<input class="layer"  type="text" value="' + data + '">';
          }
        }, {
          data : 'col',
          width : '70px',
          render : function(data, type, row, meta) {
            return '<input class="col"  type="text" value="' + data + '">';
          }
        }],
        data: []
      });
    }
    importData = data || [];
    importTable.clear().rows.add(importData).draw();
  };  
  $('#importdiv table').on('blur', '.rackid',  function(){
    var $this = $(this);
    var rackId = $.trim($this.val());    
    if($this.data('oldv') == rackId) {
      return;
    }
    if (rackId == '') {
      $this.data('oldv', '');
      return;
    }
    $.ajax({
      url : 'rack/' + rackId,
      method : 'GET',
      data : {
        _method : 'GET'
      }
    }).done(function(data, textStatus, jqXHR){
      if(!data) {
        alert('货架编号不存在！');
        $this.focus();
      } else {
        $this.data('oldv', rackId);
      }
    });
  });
  $('#importdiv .userdlg-bbar .btn-default').click(function() {
    layer.close(importDlg);
  });
  $('#importdiv .userdlg-bbar .btn-primary').click(function() {
    var datas = [];
    var reg = /^[1-9]\d*$/;
    var error = false;
    $('#importdiv tbody tr').each(function(index, element){
      var $this = $(this);
      var data = $.extend({}, importData[index]);
      var rackid = $.trim($this.find('.rackid').val());
      if(rackid == '') {
        alert('货架编号不能为空！')
        $this.find('.rackid').focus();  
        error = true;
        return false;
      }
      var quantity = $.trim($this.find('.quantity').val());
      if(!reg.test(quantity)) {
        alert('数量必须是合法的数字！')
        $this.find('.quantity').focus();        
        error = true;
        return false;
      }      
      var layer = $.trim($this.find('.layer').val());
      if(!reg.test(layer)) {
        alert('所在层必须是合法的数字！')
        $this.find('.layer').focus();        
        error = true;
        return false;
      }
      var col = $.trim($this.find('.col').val());
      if(!reg.test(col)) {
        alert('数量必须是合法的数字！')
        $this.find('.col').focus();        
        error = true;
        return false;
      }
      data.rackId = rackid;
      data.quantity = parseInt(quantity);
      data.layer = parseInt(layer);
      data.col = parseInt(col);
      datas.push(data);
    });
    if(error) {
      return;
    }
    var d = $.customParam( {
      vouchers: datas,
      _method: 'POST'
    });
    $.ajax({
      dataType : 'json',
      url : 'dv/batch',
      method : 'POST',
      data : d
    }).done(function( data, textStatus, jqXHR ) {
      layer.close(importDlg);      
      $table.ajax.reload();
    });
  });
});